home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / usr / lib / python2.5 / linecache.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-29  |  3KB  |  145 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. '''Cache lines from files.
  5.  
  6. This is intended to read lines from modules imported -- hence if a filename
  7. is not found, it will look down the module search path for a file by
  8. that name.
  9. '''
  10. import sys
  11. import os
  12. __all__ = [
  13.     'getline',
  14.     'clearcache',
  15.     'checkcache']
  16.  
  17. def getline(filename, lineno, module_globals = None):
  18.     lines = getlines(filename, module_globals)
  19.     if lineno <= lineno:
  20.         pass
  21.     elif lineno <= len(lines):
  22.         return lines[lineno - 1]
  23.     else:
  24.         return ''
  25.  
  26. cache = { }
  27.  
  28. def clearcache():
  29.     '''Clear the cache entirely.'''
  30.     global cache
  31.     cache = { }
  32.  
  33.  
  34. def getlines(filename, module_globals = None):
  35.     """Get the lines for a file from the cache.
  36.     Update the cache if it doesn't contain an entry for this file already."""
  37.     if filename in cache:
  38.         return cache[filename][2]
  39.     else:
  40.         return updatecache(filename, module_globals)
  41.  
  42.  
  43. def checkcache(filename = None):
  44.     '''Discard cache entries that are out of date.
  45.     (This is not checked upon each call!)'''
  46.     if filename is None:
  47.         filenames = cache.keys()
  48.     elif filename in cache:
  49.         filenames = [
  50.             filename]
  51.     else:
  52.         return None
  53.     for filename in filenames:
  54.         (size, mtime, lines, fullname) = cache[filename]
  55.         if mtime is None:
  56.             continue
  57.         
  58.         
  59.         try:
  60.             stat = os.stat(fullname)
  61.         except os.error:
  62.             del cache[filename]
  63.             continue
  64.  
  65.         if size != stat.st_size or mtime != stat.st_mtime:
  66.             del cache[filename]
  67.             continue
  68.     
  69.  
  70.  
  71. def updatecache(filename, module_globals = None):
  72.     """Update a cache entry and return its list of lines.
  73.     If something's wrong, print a message, discard the cache entry,
  74.     and return an empty list."""
  75.     if filename in cache:
  76.         del cache[filename]
  77.     
  78.     if not filename or filename[0] + filename[-1] == '<>':
  79.         return []
  80.     
  81.     fullname = filename
  82.     
  83.     try:
  84.         stat = os.stat(fullname)
  85.     except os.error:
  86.         msg = None
  87.         basename = os.path.split(filename)[1]
  88.         if module_globals and '__loader__' in module_globals:
  89.             name = module_globals.get('__name__')
  90.             loader = module_globals['__loader__']
  91.             get_source = getattr(loader, 'get_source', None)
  92.             if name and get_source:
  93.                 if basename.startswith(name.split('.')[-1] + '.'):
  94.                     
  95.                     try:
  96.                         data = get_source(name)
  97.                     except (ImportError, IOError):
  98.                         pass
  99.  
  100.                     if data is None:
  101.                         return []
  102.                     
  103.                     cache[filename] = ([], [], [ line + '\n' for line in data.splitlines() ], fullname)
  104.                     return cache[filename][2]
  105.                 
  106.             
  107.         
  108.         if basename == '__init__.py':
  109.             basename = filename
  110.         
  111.         for dirname in sys.path:
  112.             
  113.             try:
  114.                 fullname = os.path.join(dirname, basename)
  115.             except (TypeError, AttributeError):
  116.                 continue
  117.  
  118.             
  119.             try:
  120.                 stat = os.stat(fullname)
  121.             continue
  122.             except os.error:
  123.                 continue
  124.             
  125.  
  126.         else:
  127.             return []
  128.     except:
  129.         None<EXCEPTION MATCH>os.error
  130.  
  131.     
  132.     try:
  133.         fp = open(fullname, 'rU')
  134.         lines = fp.readlines()
  135.         fp.close()
  136.     except IOError:
  137.         msg = None
  138.         return []
  139.  
  140.     size = stat.st_size
  141.     mtime = stat.st_mtime
  142.     cache[filename] = (size, mtime, lines, fullname)
  143.     return lines
  144.  
  145.